home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / addr / ap_equ.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  2.0 KB  |  86 lines

  1. /* ap_equ: check to see if to strings represent same address */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/addr/RCS/ap_equ.c,v 6.0 1991/12/18 20:21:24 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/addr/RCS/ap_equ.c,v 6.0 1991/12/18 20:21:24 jpo Rel $
  9.  *
  10.  * $Log: ap_equ.c,v $
  11.  * Revision 6.0  1991/12/18  20:21:24  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include    "util.h"
  19. #include    "ap.h"
  20. #include    "adr.h"
  21. #include    "chan.h"
  22.  
  23. extern char *loc_dom_site, *loc_dom_mta;
  24. extern char *ad_getlocal();
  25.  
  26. ap_equ (one, two)
  27. char    *one,
  28.     *two;
  29. {
  30.     AP_ptr    one_tree, two_tree,
  31.         loc1, dom1, loc2, dom2;
  32.     int    equ = FALSE;
  33.  
  34.     one_tree = ap_s2t(one);
  35. #ifdef UKORDER
  36.     one_tree = ap_normalize(one_tree, CH_UK_PREF);
  37. #else
  38.     one_tree = ap_normalize(one_tree, CH_USA_PREF);
  39. #endif
  40.     two_tree = ap_s2t(two);
  41. #ifdef UKORDER
  42.     two_tree = ap_normalize(two_tree, CH_UK_PREF);
  43. #else
  44.     two_tree = ap_normalize(two_tree, CH_USA_PREF);
  45. #endif
  46.  
  47.  
  48.     (void) ap_t2p (one_tree, (AP_ptr *)0, (AP_ptr *)0,
  49.                &loc1, &dom1, (AP_ptr *)0);
  50.     (void) ap_t2p (two_tree, (AP_ptr *)0, (AP_ptr *)0,
  51.                &loc2, &dom2, (AP_ptr *)0);
  52.     
  53.     if (dom1 && dom2 && lexequ(dom1->ap_obvalue, dom2->ap_obvalue) ==0) {
  54.         /* same domains */
  55.         if (dom1->ap_islocal == TRUE
  56.             || lexequ(dom1->ap_obvalue, loc_dom_site) == 0
  57.             || lexequ(dom1->ap_obvalue, loc_dom_mta) == 0) {
  58.             /* local addresses */
  59.             char    *oneloc, *twoloc;
  60.             oneloc = ad_getlocal(one, AD_822_TYPE, YES);
  61.             twoloc = ad_getlocal(two, AD_822_TYPE, YES);
  62.             if (oneloc != NULLCP
  63.                 && twoloc != NULLCP
  64.                 && lexequ(oneloc, twoloc) == 0)
  65.                 equ = TRUE;
  66.             if (oneloc == NULLCP
  67.                 && twoloc == NULLCP
  68.                 && loc1 && loc2
  69.                 && lexequ(loc1->ap_obvalue, loc2->ap_obvalue) == 0)
  70.                 /* x400 encapsulated addrs */
  71.                 equ = TRUE;
  72.             if (oneloc != NULLCP) free(oneloc);
  73.             if (twoloc != NULLCP) free(twoloc);
  74.         } else if (loc1 && loc2 && 
  75.                lexequ(loc1->ap_obvalue, loc2->ap_obvalue) == 0)
  76.             equ = TRUE;
  77.  
  78.     }
  79.     (void) ap_sqdelete(one_tree, NULLAP);
  80.     (void) ap_sqdelete(two_tree, NULLAP);
  81.     return equ;
  82. }
  83.             
  84.         
  85.                    
  86.